

import { getAccessToken,getRefreshToken, getTenantId } from '@/utils/auth'
import {CancelRegWebNotify, getWpsEnum, InvokeAsHttp, RegWebNotify} from "@/utils/wpsjs-rpc";
import {getUserCache} from "@/hooks/web/useCache";
import {fileInfoEnum} from "@/components/WpsOffice/common/common";


// 加载项名称
const pluginName = "yudao-ui-wps";
// 组件类型
var pluginType = getWpsEnum()//加载项类型wps,et,wpp
var clientStr = pluginName + pluginType + "ClientId"

/**
 * 此方法是根据wps_sdk.js做的调用方法封装
 * 可参照此定义
 * @param {*} funcs         这是在WPS加载项内部定义的方法，采用JSON格式（先方法名，再参数）
 * @param {*} front         控制着通过页面执行WPS加载项方法，WPS的界面是否在执行时在前台显示
 * @param {*} jsPluginsXml  指定一个新的WPS加载项配置文件的地址,动态传递jsplugins.xml模式，例如：http://127.0.0.1:3888/jsplugins.xml
 * @param {*} isSilent      隐藏打开WPS，如果需要隐藏，那么需要传递front参数为false
 */

export const _WpsInvoke = (funcs, front, isSilent,route,officeID,handleWpsMessage)=>{
  let info = {};
  info.funcs = funcs;
  // token 信息
  {
    info.ACCESS_TOKEN = getAccessToken()
    info.REFRESH_TOKEN = getRefreshToken()
    info.tenantId = getTenantId()
    info.USER_CACHE = JSON.stringify(getUserCache())
    console.log('info',info)
  }
  // 路由 文件ID
  {
    info[fileInfoEnum.routeId] = route
    info[fileInfoEnum.officeId] = officeID
  }
  if(isSilent){//隐藏启动时，front必须为false
    front=false;
  }
  /**
   * 下面函数为调起WPS，并且执行加载项WpsOAAssist中的函数dispatcher,该函数的参数为业务系统传递过去的info
   */
    singleInvoke(info,front,isSilent,route,officeID,handleWpsMessage)

}

// export const _WpsInvokeClose = ()=>{
//  stopRunTimeoutAskItem()
// }
//单进程
const singleInvoke = (info,front,isSilent,route,officeID,handleWpsMessage)=>{
  InvokeAsHttp(
    // 组件类型
    pluginType,
    // 插件名，与wps客户端加载的加载的插件名对应
    pluginName,
    // 插件方法入口，与wps客户端加载的加载的插件代码对应，详细见插件代码
    "dispatcher",
    // 传递给插件的数据
    info,
    function (result) { // 调用回调，status为0为成功，其他是错误
      if (result.status) {
        if (result.status == 100) {
          alert('请在稍后打开的网页中，点击"高级" => "继续前往"，完成授权。')
          return;
        }
        alert(result.message)

      } else {
        console.log(result.response)
        showresult(result.response)
      }
    },
    front,
    isSilent)

  /**
   * 接受WPS加载项发送的消息
   * 接收消息：WpsInvoke.RegWebNotify（type，name,callback）
   * WPS客户端返回消息： wps.OAAssist.WebNotify（message）
   * @param {*} type 加载项对应的插件类型
   * @param {*} name 加载项对应的名字
   * @param {*} officeID 路由名字
   * @param {func} callback 接收到WPS客户端的消息后的回调函数，参数为接受到的数据
   */
  RegWebNotify(pluginType, pluginName,route,officeID, handleWpsMessage)
}
export const cancelRegWebNotify = (route)=>{
  CancelRegWebNotify(pluginType, pluginName,route)
}

/**
 * 处理WPS加载项的方法返回值
 *
 * @param {*} resultData
 */
const showresult = function(resultData) {
  let json = eval('(' + resultData + ')')
  switch (json.message) {
    case "GetDocStatus": {
      let docstatus = json.docstatus
      if (typeof docstatus != "undefined") {
        let str = "文档保存状态：" +
          docstatus.saved +
          "\n文档字数：" +
          docstatus.words +
          "\n文档页数：" + docstatus.pages
        alert(str)
      }
    }
  }
}
